package ru.vt.simpleservlet.responsers;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import ru.vt.simpleservlet.data.AllData;
import ru.vt.simpleservlet.data.DataPosition;
import ru.vt.simpleservlet.dbinterraction.Extractor;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.Map;
import java.util.Set;

/**
 * Сервлет возвращает значение текущей версии базы в xml-response
 *
 * @author Vit
 */
public class HttpDataGetter extends HttpServlet {

    /**
     * Принимает запрос с уникальными номерами и возвращает в виде xml перечень элементов
     *
     * @param request  Пришедший запрос с параметром, иначе ошибка 400
     * @param response Посылка сформированной xml с возможностью открыть в браузере
     * @throws javax.servlet.ServletException
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException {
        int verifySumm = 0;
        verifySumm = (int) request.getParameterMap().size();
        if (verifySumm == 0) {
            try {
                response.sendError(400);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (verifySumm > 0) {
            AllData allData = new AllData();
            Extractor.extractData(allData);
            AllData responseData=new AllData();
            Set<String> keys = request.getParameterMap().keySet();
            Map<String,String[]> requestMap=request.getParameterMap();
            for(String key:keys){
                String[] paramValues=requestMap.get(key);
                String value="";
                for(int i=0; i<paramValues.length; i++) {
                value=value+paramValues[i];
                }
              responseData.Add(allData.getValue(value));
            }
            //http://localhost:8080/data?data1=abcd1&data2=abcd2&data3=abcd3
            ServletOutputStream stream = null;
            try {
                stream = response.getOutputStream();
                response.setContentType("text/xml");
                response.addHeader(
                        "Content-Disposition", "attachment; filename=data");
                XStream xstream = new XStream(new DomDriver("UTF-8"));
                xstream.alias("Data", AllData.class);
                xstream.alias("DataPosition", DataPosition.class);
                //шапка для xml-документа
                String xmlHead = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n";
                stream.write(xmlHead.getBytes(Charset.forName("UTF-8")));
                xstream.toXML(responseData, stream);
            } catch (IOException ioe) {
                try {
                    response.sendError(400);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } finally {
                if (stream != null)
                    try {
                        stream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
            }
        }
    }

}
